package com.bicntech.common.utils.ip;


import cn.hutool.core.lang.Dict;
import cn.hutool.core.net.NetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HtmlUtil;
import cn.hutool.http.HttpUtil;
import com.bicntech.common.config.AirportConfig;
import com.bicntech.common.constant.Constants;
import com.bicntech.common.utils.JSON;
import com.bicntech.common.utils.StringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
 * 获取地址类
 *
 * @author Lion Li
 */
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class AddressUtils {
    // IP地址查询
    public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp";
    // 未知地址
    public static final String UNKNOWN = "XX XX";

    public static String getRealAddressByIP(String ip) {
        String address = UNKNOWN;
        if(StrUtil.isBlank(ip)){
            return address;
        }
        // 内网不查询
        ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip);
        if (NetUtil.isInnerIP(ip)) {
            return "内网IP";
        }
        if(AirportConfig.isAddressEnabled()){
            try{
                String rspStr = HttpUtil.createGet(IP_URL)
                        .body("ip="+ip+"&json=true", Constants.GBK)
                        .execute()
                        .body();
                if(StringUtils.isEmpty(rspStr)){
                    Dict obj = JSON.toJavaObject(rspStr,Dict.class);
                    String region = obj.getStr("pro");
                    String city = obj.getStr("city");
                    return String.format("%s %s",region,city);
                }
            }catch (Exception e){
                log.error("获取地址位置异常", ip);
            }
        }
        return UNKNOWN;
    }
}
